home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / progsrc / v3dt090 / showasc.cpp < prev    next >
C/C++ Source or Header  |  1994-10-25  |  6KB  |  238 lines

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include "3dtools.h"
  6. #include "mode13h.h"
  7.  
  8.  
  9. void main(int argc, char *argv[])
  10. {
  11.     FILE *inFile;
  12.     int tempInt, vertices, faces, count, vNum, tempA, tempB, tempC;
  13.     char tempChar;
  14.     float tempX, tempY, tempZ;
  15.     unsigned long tIn, tOut, *timer;
  16.     int shades;
  17.  
  18.     if (argc < 2)
  19.     {
  20.         printf("USAGE:  showasc <filename.asc> <shading>\n");
  21.         printf("\nshading:  0 = none; 1 = lambert; 2 = gouraud\n");
  22.         exit(1);
  23.     }
  24.  
  25.     if (argc > 2)
  26.         shades = atoi(argv[2]);
  27.     else
  28.         shades = sGouraud;
  29.  
  30.     char *tempStr = new char [80];
  31.     char *virtScreen = new char [64000];
  32.     obj3d *test = new obj3d(0, 0, 4096);    // de obyect
  33.  
  34.     inFile = fopen(argv[1], "rt");
  35.     if (inFile == NULL)
  36.     {
  37.         printf("%s does not exist!\n", argv[1]);
  38.         printf("USAGE:  showasc <filename.asc>\n");
  39.         exit(3);
  40.     }
  41.  
  42.     while (strncmp(tempStr, "Vertices", 8))
  43.     {
  44.         fscanf(inFile, "%s", tempStr);
  45.         if (feof(inFile))
  46.         {
  47.             printf("End-o-FILE and string \"Vertex\" NOT FOUND!!\n");
  48.             exit(2);
  49.         }
  50.     }
  51.  
  52.     printf("Found string: %s\n", tempStr);
  53.  
  54.     tempChar = fgetc(inFile);
  55.  
  56.     fscanf(inFile, "%d", &vertices);
  57.  
  58.     printf("Object has %d vertices\n", vertices);
  59.  
  60.     while (strncmp(tempStr, "Faces", 5))
  61.     {
  62.         fscanf(inFile, "%s", tempStr);
  63.         if (feof(inFile))
  64.         {
  65.             printf("End-o-FILE and string \"Faces\" NOT FOUND!!\n");
  66.             exit(2);
  67.         }
  68.     }
  69.  
  70.     printf("Found string: %s\n", tempStr);
  71.  
  72.     tempChar = fgetc(inFile);
  73.  
  74.     fscanf(inFile, "%d", &faces);
  75.  
  76.     printf("Object has %d faces\n", faces);
  77.  
  78.     // fseek(inFile, 0, SEEK_SET);
  79.  
  80.     while (strncmp(tempStr, "Vertex", 6))
  81.     {
  82.         fscanf(inFile, "%s", tempStr);
  83.         if (feof(inFile))
  84.         {
  85.             printf("End-o-FILE and string \"Vertex\" NOT FOUND!!\n");
  86.             exit(2);
  87.         }
  88.     }
  89.  
  90.     while (strncmp(tempStr, "list:", 5))
  91.     {
  92.         fscanf(inFile, "%s", tempStr);
  93.         if (feof(inFile))
  94.         {
  95.             printf("End-o-FILE and string \"list:\" NOT FOUND!!\n");
  96.             exit(2);
  97.         }
  98.     }
  99.  
  100.  
  101.  
  102.     printf("\nVertex data:\n");
  103.  
  104.     tempStr = "blah blah blah";
  105.  
  106.     for (count = 0; count < vertices; count++)
  107.     {
  108.         while (strncmp(tempStr, "Vertex", 6))
  109.         {
  110.             fscanf(inFile, "%s", tempStr);
  111.             if (feof(inFile))
  112.             {
  113.                 printf("End-o-FILE and string \"Vertex\" NOT FOUND!!\n");
  114.                 exit(2);
  115.             }
  116.         }
  117.  
  118.         fscanf(inFile, "%d", &vNum);
  119.         fscanf(inFile, "%s", tempStr);
  120.         fscanf(inFile, "%s", tempStr);
  121.         fscanf(inFile, "%f", &tempX);
  122.         fscanf(inFile, "%s", tempStr);
  123.         fscanf(inFile, "%f", &tempY);
  124.         fscanf(inFile, "%s", tempStr);
  125.         fscanf(inFile, "%f", &tempZ);
  126.  
  127.         printf("Vertex %d:  %8d %8d %8d\n", vNum, (int) tempX, (int) tempY, (int) tempZ);
  128.         test->addLocalPoint((int) tempX, (int) tempY, (int) tempZ);
  129.     }
  130.  
  131.     while (strncmp(tempStr, "Face", 4))
  132.     {
  133.         fscanf(inFile, "%s", tempStr);
  134.         if (feof(inFile))
  135.         {
  136.             printf("End-o-FILE and string \"Face\" NOT FOUND!!\n");
  137.             exit(2);
  138.         }
  139.     }
  140.  
  141.     printf("\nFound string: %s\n", tempStr);
  142.  
  143.     while (strncmp(tempStr, "list", 4))
  144.     {
  145.         fscanf(inFile, "%s", tempStr);
  146.         if (feof(inFile))
  147.         {
  148.             printf("End-o-FILE and string \"list\" NOT FOUND!!\n");
  149.             exit(2);
  150.         }
  151.     }
  152.  
  153.     printf("Found string: %s\n", tempStr);
  154.  
  155.     printf("\nFacial data:\n");
  156.  
  157.     for (count = 0; count < faces; count++)
  158.     {
  159.         while (strncmp(tempStr, "Face", 4))
  160.         {
  161.             fscanf(inFile, "%s", tempStr);
  162.             if (feof(inFile))
  163.             {
  164.                 printf("End-o-FILE and string \"Face\" NOT FOUND!!\n");
  165.                 exit(2);
  166.             }
  167.         }
  168.  
  169.         fscanf(inFile, "%d", &vNum);
  170.         fscanf(inFile, "%s", tempStr);
  171.  
  172.         while (fgetc(inFile) != 'A');
  173.         fgetc(inFile);                  // get the ':' character
  174.         fscanf(inFile, "%d", &tempA);   // get value for vertex A
  175.  
  176.         while (fgetc(inFile) != 'B');
  177.         fgetc(inFile);
  178.         fscanf(inFile, "%d", &tempB);
  179.  
  180.         while (fgetc(inFile) != 'C');
  181.         fgetc(inFile);
  182.         fscanf(inFile, "%d", &tempC);
  183.  
  184.         printf("Face %d:  %8d %8d %8d\n", vNum, (int) tempA, (int) tempB, (int) tempC);
  185.         test->addLocalPoly(tempA, tempB, tempC, 1);
  186.     }
  187.  
  188.     initSinCos();
  189.  
  190.     setMode13h(virtScreen);
  191.  
  192.     for (count = 1; count < 18; count++)
  193.         set_dac_register(count, 20 + count, 10 + count,
  194.             20 + count);
  195.  
  196.     for (count = 0; count < test->numPolys; count++)
  197.     {
  198.         test->poly[count]->shading = shades;
  199.         test->poly[count]->facing  = fOutside;
  200.     }
  201.  
  202.     test->setGNormals();
  203.  
  204.     test->display();
  205.  
  206.     getch();
  207.  
  208.     setActivePage(pVirtual);
  209.  
  210.     timer = (unsigned long *) 0x046c;
  211.     tIn = *timer;
  212.     for (count = 1; (count <= 1000) && !kbhit(); count++)
  213.     {
  214.         test->localRotate(-2, 4, -6);
  215.         clearScreen(0);
  216.         test->display();
  217.         flipVPage();
  218.     }
  219.  
  220.     tOut = *timer;
  221.  
  222.  
  223.     if (count < 1000)
  224.         getch();
  225.  
  226.  
  227.     textMode();
  228.  
  229.     printf("%f\n", (float) ((count * 18.2) / (tOut - tIn)));
  230.  
  231.     fclose(inFile);
  232.     delete test;
  233.     //delete tempStr;
  234.  
  235.     exit(0);
  236. }
  237.  
  238.